为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate 入门

标签:
SQL Server

hibernate 的Query
HQL(Hibernate Query Language)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式.
list() 查询多条

@Test        public void query(){            // sql : select 列名    from 表明;            // hql : select 属性名 from 类名;             //       select 别名.属性 from 类名 as 别名;            String hql = "from User";            Query query = session.createQuery(hql);            List list = query.list();            System.out.println(list);        }

查询多个属性时,返回的是对象数组;
其中对象中第一个为id,第二个元素为pwd

String hql = "select id,pwd from user";    List<Object[]> list = session.createQuery(hql);

uniqueResult() 查询一条.

String hql = "select count(*) from User";          Query query = session.createQuery(hql);          Object uniqueResult = query.uniqueResult();

分页查询
setFirstResult(N):查询的第N条数据编号
setMaxResults(20):查询的数据总量

String hql = "from User";    Query query = session.createQuery(hql);    query.setFirstResult(1);    query.setMaxResults(20);    List list = query.list();    System.out.println(list);

可变参数查询(占位符)

String hql = "from User where name = ? and age = ?";        Query query = session.createQuery(hql);        query.setParameter(0, "fy"); // query.setString(1, "fy");        query.setParameter(1, "18");        List list = query.list();        System.out.println(list);        常用写法:        String hql = "from User where name = :name and age = :age";        query.setString("name", "fy");        query.setString("age", "18");

聚合函数

count       返回的结果:Longmax/min     返回的结果:原始类型sum         返回的结果:Long或Doubleavg         返回的结果:Double

由于返回结果通常为单一数据,常使用uniqueResult()获得结果
分组查询

Query q = s.createQuery("select address,count(address) from UserModel group by address");

排序查询

Query q = s.createQuery("from UserModel order by age desc");

投影数据封装
前提: 对象模型中需要有UserModel(age,name)构造方法,参数顺序必须与hql中投影一致.

s.createQuery("select new UserModel(age,name) from UserModel");
———华丽分割——–hibernate 的Criteria
Criteria查询又名QBC查询,以面向对象格式完成查询操作,实现真正的自动生成SQL语句.
查询单一属性: 返回该属性类型

Criteria criteria = session.createCriteria(User.class);      //Hibernate: select this_.name as y0_ from userdata this_      方式一:      Property pro = Property.forName("name");      criteria.setProjection(pro);      方式二:      PropertyProjection property = Projections.property("name");      criteria.setProjection(property);      List list = criteria.list();

criteria.setProjection(property);不能重复复制,如果重复设置的话会把上一个覆盖.
查询多个属性: 查询结果为对象数组

1.声明查询属性的列表对象       ProjectionList li = Projections.projectionList();       2.声明要查询的属性       PropertyProjection name = Projections.property("name");       PropertyProjection id = Projections.property("id");       3.将查询的属性放入属性列表       li.add(id);       li.add(name);       4.为criteria设置属性列表       criteria.setProjection(li);       List<Object[]> list = criteria.list();

聚合函数

count:   行数            Projection condition = Projections.rowCount();          max/min: 最大值                Projection conditionMax = Projections.max("age");                   Projection conditionMin = Projections.min("age");               Sum  :   和            Projection conditionSum = Projections.sum("age");               Avg :    平均数            Projection conditionAvg = Projections.avg("age");

分组查询

Projections.groupProperty("address");

排序

criteria.addOrder(Order.desc("age"));     criteria.addOrder(Order.asc("age"));

条件查询.
条件查询使用

Restrictions.eq 等于= Restrictions.allEq  使用Map,使用key/value进行多个等于的判断   Restrictions.gt 大于>   Restrictions.ge 大于等于>=   Restrictions.lt 小于<   Restrictions.le 小于等于<=   Restrictions.between    对应sql的between子句   Restrictions.like   对应sql的like子句   Restrictions.in 对应sql的in子句   Restrictions.and    and 关系   Restrictions.or or关系   Restrictions.sqlRestriction Sql限定查询   Criterion c = Restrictions.allEq(arg0);   criteria.add(c);

离线查询 (DetachedCriteria)
将查询字段在view层封装到DetachedCriteria对象中,
DetachedCriteria不依赖session即可创建. 这样session就不会暴露在view以及业务层.最后在Controller层,通过session把DetachedCriteria装换成可以执行查询的Criteria.

表现层:    DetachedCriteria dc = DetachedCriteria.forClass(UserModel.class);    dc.add(Restrictions.like("address", "%"+address+"%"));    dc.add(Restrictions.between("age", age1, age2));    数据层:    Criteria c = dc.getExecutableCriteria(session);    c.list();

———华丽分割——–hibernate 的SQLQuery查询
直接执行原生的sql语句.

String sql = "select * from tbl_user";    SQLQuery sq = session.createSQLQuery(sql);    sq.list(); //uniqueResult()

通过别名为查询的模型数据进行封装.

String sql = "select u.* from tbl_user u";   SQLQuery sq = session.createSQLQuery(sql);   sq.addEntity("别名",模型类.class); // sq.addEntity("u",模型类.class);

———华丽分割——–配置型SQL/HQL语句
1.在hbm.xml的hibernate-mapping元素中配置

配置SQL语句时,为避免语句中具有与XML语法格式冲突的符号,通常使用使用XML语法.`

:age]]>

:age 也是占位符`1.使用Query执行查询`Query q = s.getNamedQuery("配置中的查询名字");`

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消